Skip to content

Conversation

snowystinger
Copy link
Member

@snowystinger snowystinger commented Aug 26, 2025

Closes

Opening as I finally fixed the existing tests, there are still oddities around behaviours. I started with moving useTypeSelect from capture to bubble phase and then proceeded to deal with the fallout from that. I also moved a few things, such as useSelect and useSelectableCollection to useKeyboard

I'm beginning to reach the conclusion that the current useKeyboard is actually more harmful to our goal rather than helpful.
We stopPropagation on everything, even if we don't handle that key.
We then have to explicitly continuePropagation for some set of keys.
This then interferes with listeners farther up which expect it to be stopped, and much now stop it themselves.
This gets even trickier if they are nested in reverse sometimes as well, calling continue is just too powerful, or too hard to predictably stop.

I think we should consider not stopping by default anymore. Only call stop on the events which actually result in something we handle and really shouldn't continue.

Please share any opinions on this matter. I'm still mulling it over.

✅ Pull Request Checklist:

  • Included link to corresponding React Spectrum GitHub Issue.
  • Added/updated unit tests and storybook for this change (for new code or code which already has tests).
  • Filled out test instructions.
  • Updated documentation (if it already exists for this component).
  • Looked at the Accessibility Practices for this feature - Aria Practices

📝 Test Instructions:

🧢 Your Project:

@rspbot
Copy link

rspbot commented Aug 26, 2025

@nwidynski
Copy link
Contributor

@snowystinger Just to be clear, this PR addresses event leaks in text field and grid components themselves, right? So I assume work on other components which could go inside grids remains?

@snowystinger
Copy link
Member Author

Correct, this is a bit POC at the moment. If this is any indication, it's going to be a large effort and many PRs to fix it everywhere.

Hopefully this is the hardest bit though with how many capture and conflicting events there are in grids at the moment.

# Conflicts:
#	packages/@react-aria/select/src/useSelect.ts
#	packages/@react-spectrum/table/test/TableDnd.test.js
#	packages/react-aria-components/test/GridList.test.js
@rspbot
Copy link

rspbot commented Sep 23, 2025

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants